package code.c09;

/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/10/28 21:46
 * @package code.e09
 * @description 创建多线程
 * 方式1：继承 Thread 类
 */

public class Ex01 {
    public static void main(String[] args) {
        // 步骤三
        MyThread ti = new MyThread();
        // 步骤四
        ti.start();

        // 主线程
        for (int i = 0; i < 100; i++) {
            System.out.println("主线程===========" + i);
        }
        ;

        // 匿名子类创建多线程
        new Thread() {
            @Override
            public void run() {
                System.out.println("匿名子类");
            }
        }.start();
    }
}


// 步骤一
class MyThread extends Thread {
    // 步骤二
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(i);
            }
        }
    }
}

/**
 * 常用方法测试
 */
class MyThread2 extends Thread {
    MyThread2() {

    }

    // 在构造方法中给线程起名
    MyThread2(String name) {
        super(name);
    }

    @Override
    public void run() {
        // currentThread 返回当前线程
        // getName 返回当前线程的名字
        for (int i = 0; i < 100; i++) {
            if (i == 50) {
                // yield 释放当前的cpu的执行权
                Thread.yield();
            }
            System.out.println(currentThread().getName() + "子线程" + i);
        }

    }
}

class ThreadMethodTest {
    public static void main(String[] args) throws InterruptedException {
        // 给main 线程起名
        Thread.currentThread().setName("主线程");

        MyThread2 myThread2 = new MyThread2();
        // setName 设置线程的线程名
        myThread2.setName("线程一");

        // start 启动线程
        myThread2.start();

        for (int i = 0; i < 100; i++) {
            System.out.println(i);
            // sleep 手动阻塞
            Thread.sleep(1000);
            if (i == 20){
                // join 在一个线程中 加入另一个线程
                myThread2.join();

                // isAlice 判断线程是否存活
                System.out.println(myThread2.isAlive());
            }
        }
    }
}

